import request from '@/utils/request'
import type {
  LoginRequest,
  RegisterRequest,
  LoginResponse,
  UserInfo,
  RefreshTokenRequest,
  ChangePasswordRequest,
  UpdateProfileRequest,
  UpdateUserRequest,
  UpdateUserRoleRequest,
  UserListResponse
} from '@/types/api/auth'
import type { BaseResponse, PaginationResponse } from '@/types/common/response'

/**
 * 认证相关API
 */
export const authApi = {
  /**
   * 用户登录
   * @param data 登录参数
   */
  login(data: LoginRequest) {
    return request.post<LoginResponse>('/auth/login', data)
  },

  /**
   * 用户注册
   * @param data 注册参数
   */
  register(data: RegisterRequest) {
    return request.post<null>('/auth/register', data)
  },

  /**
   * 获取当前用户信息
   */
  getUserInfo() {
    return request.get<UserInfo>('/auth/userinfo')
  },

  /**
   * 修改密码
   * @param data 修改密码参数
   */
  changePassword(data: ChangePasswordRequest) {
    return request.post<null>('/auth/change-password', data)
  },

  /**
   * 更新个人资料
   * @param data 个人资料参数
   */
  updateProfile(data: UpdateProfileRequest) {
    return request.put<null>('/auth/profile', data)
  },

  /**
   * 退出登录
   */
  logout() {
    return request.post<null>('/auth/logout')
  },

  /**
   * 刷新Token
   * @param data 刷新Token参数
   */
  refreshToken(data: RefreshTokenRequest) {
    return request.post<LoginResponse>('/auth/refresh-token', data)
  }
}

/**
 * 用户管理相关API（管理员权限）
 */
export const userApi = {
  /**
   * 获取用户列表
   * @param params 查询参数
   */
  getUserList(params: { page: number; pageSize: number; keyword?: string }) {
    return request.get<PaginationResponse<UserInfo>>('/users', { params })
  },

  /**
   * 获取用户详情
   * @param id 用户ID
   */
  getUserDetail(id: number) {
    return request.get<UserInfo>(`/users/${id}`)
  },

  /**
   * 更新用户信息
   * @param id 用户ID
   * @param data 用户信息
   */
  updateUser(id: number, data: UpdateUserRequest) {
    return request.put<null>(`/users/${id}`, data)
  },

  /**
   * 启用/禁用用户
   * @param id 用户ID
   * @param status 用户状态
   */
  updateUserStatus(id: number, status: number) {
    return request.put<null>(`/users/${id}/status`, { status })
  },

  /**
   * 修改用户角色
   * @param id 用户ID
   * @param data 角色信息
   */
  updateUserRole(id: number, data: UpdateUserRoleRequest) {
    return request.put<null>(`/users/${id}/role`, data)
  }
}
